#!/usr/bin/python
# -*- coding: utf-8 -*-


import os
import getpass

from argparse import *
from lpd_commons import *

import csv

from SQLite3_data import *

from reports import *

#---------------------------------------------------------------------------
class arginput():
    """
    Argumentos de entrada
    """
    parser = ArgumentParser(description="Ferramenta para tratamento de ficheiro de log da Firewall")

    parser.add_argument('-v',   help="Mostra a versão do programa", 
                                action='version',   version='%(prog)s 1.0')
    parser.add_argument("-in",  dest="file_input", help="Ficheiro de entrada", metavar="<ficheiro de log>", default=None  )
    parser.add_argument("-csv", help="Ficheiro de Saida CSV - não acrescentar a extensão ela é gerada automaticamente",
                                dest="csv",    metavar="<ficheiro>", default=None )
    parser.add_argument("-pdf", help="Criar relatorio em formato PDF",
                                dest="pdf",  action="store_true", default=False )
    parser.add_argument("-sql", help="Guardar os dados do log na base de dados",
                                dest="sql",  action="store_true", default=False )
    parser.add_argument("-map", help="Criar um mapa geografico",
                                dest="map",  action="store_true", default=False )
    parser.add_argument("-q",   help="Imprime mensagens no ecran",
                                dest="verbose", action="store_false", default=True )

    args = parser.parse_args()    

#---------------------------------------------------------------------------
class main():

    """
    Classe principal de entrada do programa
    """

    msg = msg()     # criacao de objeto para mensagens

    vars.verbose = arginput.args.verbose
    vars.logfile = arginput.args.file_input
    if arginput.args.csv != None:
        vars.csv = True
        vars.csvfile = "{0}.csv".format(arginput.args.csv)
    vars.sql = arginput.args.sql
    vars.pdf = arginput.args.pdf
    vars.map = arginput.args.map

    if arginput.args.file_input == None:
        if arginput.args.file_input == False:
            print "\n\tErro:tem de indicar um ficheiro de log com a opção -in\n"
            os.system("python parser01.py -h")
            quit()
            pass
        else:
            pass
        pass
    else:
        vars.log = True
        try:
            log = open(arginput.args.file_input, "r")

        except:
            msg.openlog_error(vars.logfile)
            quit()
    try:
        nome = raw_input("Login: ")
        passwd = getpass.getpass("Password: ")
        validate = Validate_Login(nome, passwd)
        
        if not validate:
            print "Autenticacao falhada: Utilizador ou password inválidos"
            quit()
            pass

    except:
        pass

    if vars.log:
        GeoGet(log)
        log.close()


    if (vars.sql or vars.csv):
        CreateCsvSql()

    if (vars.map or vars.pdf):
        CreateMap()

    if vars.pdf:
        CreatePdf()

    msg.parser_end()
        

if __name__ == '__main__':
    main()  
